1. 计划任务的介绍
- 后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好
2. 计划任务的注意事项
- 编写计划任务的时候,命令必须使用绝对路径(which 命令 -> 查看命令的绝对路径)
- 计划任务执行的命令 是否存在,软件是否安装
- 确保crontab服务运行
# 命令一
systemctl status crond
# 命令二
ps -ef | grep crond
- 检测crontab是否开机启动
systemctl is-enabled crond
3. crontab 的配置文件
# 命令
vim /etc/crontab
# 配置文件内容
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
4. 计划任务的编写格式
.---------------- 分钟 (0 - 59)
| .------------- 小时 (0 - 23)
| | .---------- 日期 (1 - 31)
| | | .------- 月份 (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- 星期 (0 - 6) (星期天=0 或 7) 或 使用缩写的英文星期 sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * 绝对路径的命令或脚本
- 编写计划任务的格式
- 格式: * * * * * 命令或脚本
- 编写计划任务格式的中文说明
- 格式: 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6, 0 或 7代表星期天) 绝对路径的命令或脚本
- 计划任务的格式说明
- 第1列:表示分钟1~59 每分钟用*或者 */1表示
- 第2列:表示小时1~23(0表示0点)
- 第3列:表示日期1~31
- 第4列:表示月份1~12
- 第5列:标识号星期0~6(0表示星期天)
- 第6列:要运行的命令,且该命令必须使用绝对路径
- 计划任务的符号说明
- * : 代表“每”的意思,如: 每分钟,每小时,每天,等
30 8 * * * 绝对路径的命令或脚本 # 表示每天的8点30分执行指定的任务或命令
- , : 使用逗号隔开的值就是指定一个列表范围
0 0 5,7,9 * * 绝对路径的命令或脚本 # 表示每月的 5 7 9 号的 0 时 0 分 执行指定的任务或命令
- - : 表示指定一个整数的范围
0 0 5-15 * * 绝对路径的命令或脚本 # 表示每月的 5-15 号的 0 时 0 分 执行指定的任务或命令
- / : 表示指定时间的间隔频率
*/3 * * * * 绝对路径的命令或脚本 # 表示每隔3分钟执行指定的任务或命令
5. 计划任务的使用
- crontab命令: 被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似
- crontab命令的参数
参数 | 说明 |
-e | 编辑当前用户的计划任务 |
-l | 显示当前用户的所有计划任务 |
-r | 清空当前任务的所有计划任务 |
-u <用户名> | 给指定用户设置计划任务 |
- 进入编写计划任务的文件,默认调用 vim 打开
# 打开编写计划任务的文件,默认调用 vim 打开
crontab -e
# 打开计划任务的文件后,进行编写计划任务
* * * * * /usr/bin/echo '内容' >> /root/test.txt
- 显示当前用户的所有计划任务
crontab -l
- 清空当前任务的所有计划任务
crontab -r
- 查看计划任务的执行
tail -f /var/log/cron
6. 错误示范
- 每分钟执行指定的命令或脚本
- 错误写法: 因为这里的1代表每小时的第1分钟,不是每1分钟的意思,翻译过就是: 每小时的第1分钟执行指定的命令或脚本
1 * * * * 绝对路径的命令或脚本
- 正确写法
# 写法一
* * * * * 绝对路径的命令或脚本
# 写法二
*/1 * * * * 绝对路径的命令或脚本
- 每月的第7号执行指定的命令或脚本
- 错误写法: 因为 * 是代表“每”的意思,翻译过就是: 每月的第7号开始每一分钟都执行指定的命令或脚本
* * 7 * * 绝对路径的命令或脚本
- 正确写法
0 0 7 * * 绝对路径的命令或脚本
7. 每分钟定时执行任务之类的实例
- 注意: 所有命令一定要用绝对路径来写!
- 每分钟执行指定的命令或脚本
# 写法一
* * * * * 绝对路径的命令或脚本
# 写法二
*/1 * * * * 绝对路径的命令或脚本
- 每五分钟执行指定的命令或脚本
*/5 * * * * 绝对路径的命令或脚本
- 每小时执行指定的命令或脚本
0 * * * * 绝对路径的命令或脚本
- 每天执行指定的命令或脚本
0 0 * * * 绝对路径的命令或脚本
- 每周执行指定的命令或脚本
0 0 * * 0 绝对路径的命令或脚本
- 每月执行指定的命令或脚本
0 0 1 * * 绝对路径的命令或脚本
- 每年执行指定的命令或脚本
0 0 1 1 * 绝对路径的命令或脚本
8. 计划任务的实例
- 注意: 所有命令一定要用绝对路径来写!
- 每小时的第20分执行指定的命令或脚本
20 * * * * 绝对路径的命令或脚本
- 每小时的3,15分钟执行指定的命令或脚本
3,15 * * * * 绝对路径的命令或脚本
- 在上午8-11点的第3和第15分钟执行指定的命令或脚本
3,15 8-11 * * * 绝对路径的命令或脚本
- 每晚21:30执行指定的命令或脚本
30 21 * * * 绝对路径的命令或脚本
- 每周六、日的1:30执行指定的命令或脚本
30 1 * * 6,0 绝对路径的命令或脚本
- 每月的7号执行指定的命令或脚本
0 0 7 * * 绝对路径的命令或脚本
- 每年的10月份执行指定的命令或脚本
0 0 0 10 * 绝对路径的命令或脚本
- 每周一到周五的凌晨1点,清空/tmp目录的所有文件
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
- 每晚的21:30重启nginx
30 21 * * * /opt/nginx/sbin/nginx -s reload
- 每月的1,10,22日的4:45重启nginx
45 4 1,1,10,22 * * /opt/nginx/sbin/nginx -s reload
- 每个星期一的上午8点到11点的第3和15分钟执行指定的命令或脚本
3,15 8-11 * * 1 绝对路径的命令或脚本